//
//  HMEmoticonPackage.swift
//  EmoticonKeyboard
//
//  Created by 周英培 on 16/5/31.
//  Copyright © 2016年 周英培. All rights reserved.

//   表情的分组模型

import UIKit
//每一页的表情个数
let EmoticonPageCount = 21
//列数
let EmoticonColCount  = 7
//行数
let EmoticonRowCount  = 3

class HMEmoticonPackage: NSObject {

    //MARK:属性
    var title : String?
    
    //二维数组的属性
    var sectionEmoticon : [[HMEmoticon]] = [[HMEmoticon]]()
    
    
    //分组表情模型对象的构造方法
    init(id : String,title:String,array:[[String : String]]) {
        
        //赋值组的中文名称
        self.title = title
        
        super.init()
        
        //遍历数组 字典转模型
        //装取模型的数组
        var arrMM = [HMEmoticon]()
        
        var index = 0
        
        for item in array {
            //获取模型
            let M = HMEmoticon(id: id,dict: item)
            
            //添加到数组中
            arrMM.append(M)
            
            index += 1
            
            //每隔20个表情 添加一个删除按钮
            if index == 20 {
                
                let deleteBtn = HMEmoticon(isDelete: true)
                
                //添加到数组中
                arrMM.append(deleteBtn)
                
                //重置index 不重置 后面的就不能添加删除按钮
                index = 0
                
            }
            
        }
        
        //如果最后一页不足21个，则添加空白模型
        let deleta = array.count % 21
        
        //进行判断，如果不满21个需要添加空白模型的 进入分支 进行操作
        if deleta != 0 {
            
            for _ in deleta..<20 {
                
                //添加空白模型
                let space = HMEmoticon(isSpace: true)
                arrMM.append(space)
                
            }
            
            //当添加到组后一个是 不要加空白模型 要添加删除模型
            let delete = HMEmoticon(isDelete: true)
            arrMM.append(delete)
            
       
        }
        
        
        sectionEmoticon = sectionEmoticons(arrMM)
    }
    
    //MARK:每一组的表情转换成二维数组 即数组下面还有数组 因为是按每页21个进行分配表情的 所以数组还得分数组
    private func sectionEmoticons(array : [HMEmoticon]) -> [[HMEmoticon]] {
    
        //用来装小数组的数组
        var sectionArr = [[HMEmoticon]]()
        
        //获取页数
        let pageCount = (array.count - 1) / EmoticonPageCount + 1
        
        for i in 0..<pageCount {
            
            let loc = i * EmoticonPageCount
            var lenth = EmoticonPageCount
            
            //为了解决最后一页不够21个会出现崩溃的问题 所以先进行判断 对最后一页不满足的 来修改最后一页的个数
            if (loc + lenth) > array.count {
                
                lenth = array.count - loc
            }
            
            //截取范围
            let range = NSMakeRange(loc, lenth)
            
            //分成的小组 通过截取每页21个表情 组成的小组
            //分页截取  在swift中的数组没有截取的方法
            //但是swift中的数组 和 OC中的数组可以无缝转换
//            let subArray = (array as NSArray).subarrayWithRange(NSMakeRange(i * EmoticonPageCount, EmoticonPageCount))
            let subArray = (array as NSArray).subarrayWithRange(range)
            //添加到数组中
            sectionArr.append(subArray as! [HMEmoticon])
            
        }
    
        return sectionArr
    }
    
    
}
